bitkeeper revision 1.1159.170.58 (41b4bb00jD0BIt8SvQ2huMfxtlNGFg)
authorcl349@arcadians.cl.cam.ac.uk <cl349@arcadians.cl.cam.ac.uk>
Mon, 6 Dec 2004 20:03:12 +0000 (20:03 +0000)
committercl349@arcadians.cl.cam.ac.uk <cl349@arcadians.cl.cam.ac.uk>
Mon, 6 Dec 2004 20:03:12 +0000 (20:03 +0000)
Cset exclude: iap10@labyrinth.cl.cam.ac.uk|ChangeSet|20041205190407|24206

linux-2.6.10-rc2-xen-sparse/drivers/char/mem.c

index 49e94cac9879cb38bbed40f58b50246009710f69..d6973d3c315f7eb5a1f0c42011296f5917abe238 100644 (file)
@@ -42,7 +42,12 @@ extern void tapechar_init(void);
  */
 static inline int uncached_access(struct file *file, unsigned long addr)
 {
-#if defined(__i386__)
+#ifdef CONFIG_XEN
+       if (file->f_flags & O_SYNC)
+               return 1;
+       /* Xen sets correct MTRR type on non-RAM for us. */
+       return 0;
+#elif defined(__i386__)
        /*
         * On the PPro and successors, the MTRRs are used to set
         * memory types for physical addresses outside main memory,
@@ -201,19 +206,20 @@ static int mmap_mem(struct file * file, struct vm_area_struct * vma)
                vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 #endif
 
-#if defined(__sparc__)
+#if defined(CONFIG_XEN)
        if (io_remap_page_range(vma,
                                vma->vm_start,
                                vma->vm_pgoff << PAGE_SHIFT,
                                vma->vm_end-vma->vm_start,
-                               vma->vm_page_prot, 0))
+                               vma->vm_page_prot))
                return -EAGAIN;
 #else
-       if (io_remap_page_range(vma,
-                               vma->vm_start,
-                               vma->vm_pgoff << PAGE_SHIFT,
-                               vma->vm_end-vma->vm_start,
-                               vma->vm_page_prot))
+       /* Remap-pfn-range will mark the range VM_IO and VM_RESERVED */
+       if (remap_pfn_range(vma,
+                           vma->vm_start,
+                           vma->vm_pgoff,
+                           vma->vm_end-vma->vm_start,
+                           vma->vm_page_prot))
                return -EAGAIN;
 #endif
        return 0;